跳到主要内容

API

创建

创建/获取技能

  • 参数
    • name (string) - 技能名
  • 返回
    • skill (skill) - 技能数据表

需要在技能表中定义过名称为name的技能,才能在脚本中创建。

local mt = base.skill['技能名']

使用add_skill来给单位添加技能。

local skill = unit:add_skill('技能名', '英雄')

属性

你可以直接从技能中读取到当前的属性

local cd = skill.cool

owner

拥有技能的单位(unit)

不能自定义,这个属性被设置为add_skill时的对象。

name

技能名

get_name方法会优先获取这个值。你可以利用这个属性来方便的制作一个技能的多个版本:

local mt1 = base.skill['超电磁炮']

local mt2 = base.skill['超电磁炮-改']
mt2.name = '超电磁炮'

-- 这样你在其他地方就不用关心到底是哪个技能
if skill:get_name() == '超电磁炮' then
-- 超电磁炮 与 超电磁炮-改 都会成立
end

方法

active_cd

激活冷却

由c++实现的api

  • 参数
    • max_cd (number) - 冷却上限(秒)
    • ignore_cooldown_reduce (boolean) - 是否无视冷却缩减

这个方法有3种用法

  1. 激活冷却(如同使用了技能)
skill:active_cd()
  1. 按照指定冷却上限来激活冷却
skill:active_cd(30)
  1. 按照指定冷却上限来激活冷却,并且决定是否受冷却缩减的影响
-- 无视冷却缩减
skill:active_cd(30, true)
-- 计算冷却缩减
skill:active_cd(30, false)

add_cd

增加剩余冷却

由c++实现的api

  • 参数
    • cd (number) - 冷却

只对已经在冷却状态的技能有效,单位为秒。这个方法在用于充能型技能时,可以正确的改变层数。

skill:add_cd(1)

add_level

增加等级

由c++实现的api

  • 参数
    • lv (integer) - 等级

技能等级不能降低,且不能在技能的施法事件中改变技能等级。

skill:add_level(1)

add_stack

增加层数

由c++实现的api

  • 参数
    • stack (integer) - 层数
skill:add_stack(1)

channel_finish

引导完成

由c++实现的api

立即完成技能的引导,使技能进入施法出手阶段。只能在施法引导阶段中使用。

skill:channel_finish()

get_stage

获取当前技能阶段

由c++实现的api

获取当前技能阶段返回int, 如果返回-1表示skill为空,0到4分别表示空闲阶段、CastStart、CastChannel、CastShot、CastFinish。

skill:get_stage()

stage_finish

当前技能阶段完成,

由c++实现的api

立即完成技能当前阶段,使技能进入下一阶段。

skill:stage_finish()

stage_pause

服务器技能阶段暂停

由c++实现的api

只对当前阶段是channel和shot有效。效果为服务器阶段暂停不再更新,客户端循环播放当前阶段动画。

skill:stage_pause()

stage_resume

服务器技能阶段恢复

由c++实现的api

只对当前阶段是channel和shot而且暂停了有效。效果为服务器阶段恢复更新。

skill:stage_resume()

is_stage_paused

是否处于暂停

由c++实现的api

只对当前阶段是channel和shot而且有效。

local flag = skill:is_stage_paused()

is_stage_paused

是否处于暂停

由c++实现的api

只对当前阶段是channel和shot而且有效。

local flag = skill:is_stage_paused()

get_stage_remaining_time

获得当前阶段剩余时间

由c++实现的api

返回整数,单位毫秒

local time = skill:get_stage_remaining_time()

set_stage_remaining_time

设置当前阶段剩余时间

由c++实现的api

仅仅用于channel和shot阶段,且需要是暂停后,修改剩余时间。 修改后只会生效一次,即再次使用技能不会生效。

  • 参数
    • time (int) - 单位毫秒
skill:get_stage_remaining_time(5000)

add_damage

造成伤害

由c++实现的api

  • 参数
    • data (table) - 伤害属性表
  • 返回
    • success (boolean) - 是否成功

伤害属性等说明见damage

skill:add_damage
{
source = source,
target = target,
damage = 100,
}

disable

禁用

由c++实现的api

触发on_disable事件,技能禁用后将不再触发任何事件。

skill:disable()

enable

启用

由c++实现的api

触发on_enable事件。

skill:enable()

get

获取数据

由c++实现的api

  • 参数
    • key (非nil) - 索引
  • 返回
    • value - 值

读取技能的数据,对于技能来说,这个操作等价于skill[key]。对于施法来说,则是从它的源技能上读取数据。

local value = skill:get(key)

get_cd

获取冷却

由c++实现的api

  • 返回
    • cd (number) - 冷却(秒)
local cd = skill:get_cd()

get_level

获取等级

由c++实现的api

  • 返回
    • level (integer) - 技能等级
local level = skill:get_level()

get_name

获取技能名

由c++实现的api

  • 返回
    • name (string) - 技能名

如果技能有name属性,则返回name,否则返回技能名。

local name = skill:get_name()

get_slot_id

获取格子ID

由c++实现的api

  • 返回
    • id (integer) - 格子ID
local id = skill:get_slot_id()

get_stack

获取层数

由c++实现的api

  • 返回
    • stack (integer) - 层数
local stack = skill:get_stack()

get_target

获取目标

  • 返回
    • target (unit/point) - 技能目标

仅用于施法,返回值类型由技能的目标类型属性决定。

local target = skill:get_target()

get_type

获取类型

由c++实现的api

local type = skill:get_type()

is

是否是相同技能

由c++实现的api

  • 参数
    • dest (skill) - 另一个技能
  • 返回
    • result (boolean) - 结果

对于施法来说会使用源技能进行比较,因此可以用来判断2次施法是不是来自同一个技能。

local result = skill:is(dest)

is_cast

是否是施法

由c++实现的api

  • 返回
    • result (boolean) - 结果
local result = skill:is_cast()

is_common_attack

是否是攻击技能

由c++实现的api

  • 返回
    • result (boolean) - 是否是攻击技能

攻击技能的说明见这里。区别于attack:is_common_attack

local result = skill:is_common_attack()

is_enable

是否启用

由c++实现的api

  • 返回
    • result (boolean) - 是否启用
local result = skill:is_enable()

is_skill

是否是技能

由c++实现的api

  • 返回
    • result (boolean) - 结果

总是返回 true 。区别于attack:is_skill

local result = skill:is_skill()

mover_line

创建直线运动

由c++实现的api

  • 参数
    • data (table) - 运动属性
  • 返回
    • mover (mover) - 运动

运动的说明见这里

local mover = skill:mover_line
{
source = unit,
mover = unit,
}

mover_target

创建追踪运动

由c++实现的api

  • 参数
    • data (table) - 运动属性
  • 返回
    • mover (mover) - 运动

运动的说明见这里

local mover = skill:mover_target
{
source = unit,
mover = unit,
target = unit,
}

notify_damage

伤害通知

由c++实现的api

  • 参数
    • damage (damage) - 伤害

一般用于伤害流程,会产生以下效果:

  • 根据伤害来源、伤害目标、伤害角度与技能播放特效。
  • 根据伤害来源、伤害目标、伤害角度与技能播放音效。
  • 令伤害来源显形一段时间。
  • 令伤害来源与伤害目标的动画树切换为战斗状态。
skill:notify_damage(damage)

reload

重载

由c++实现的api

让技能重新加载脚本。不会触发任何事件。

skill:reload()

remove

移除

由c++实现的api

skill:remove()

set

设置数据

由c++实现的api

  • 参数
    • key (非nil) - 索引
    • value - 值

设置技能的数据,对于技能来说,这个操作等价于skill[key] = value。对于施法来说,则是在它的源技能上设置数据。

skill:set(key, value)

set_animation

设置动画

由c++实现的api

  • 参数
    • name (string) - 动画名称

设置本次施法使用的动画。

skill:set_animation(name)

set_cd

设置剩余冷却

由c++实现的api

  • 参数
    • cd (number) - 冷却(秒)

只对已经在冷却状态的技能有效,最小值是0,最大值是当前冷却上限。

skill:set_cd(cd)

set_level

设置等级

由c++实现的api

  • 参数
    • lv (integer) - 等级

技能等级不能降低,且不能在技能的施法事件中改变技能等级。

skill:set_level(2)

set_option

设置属性

由c++实现的api

  • 参数
    • key (string) - 属性名
    • value (number) - 属性值

修改技能的属性,并通知给客户端。

set_upgrdable

设置是否可以升级

由c++实现的api

  • 参数
    • upgradable (boolean)

simple_cast

发动效果

由c++实现的api

  • 参数
    • effect (function) - 回调函数
  • 回调参数
    • self (skill) - 施法

根据技能创建施法并执行回调函数,传入回调函数的技能是一个施法。

skill:simple_cast(function (cast)
-- 这里的cast是源自skill的施法
end)

stop

停止施法

由c++实现的api

若在施法开始阶段,则进入施法打断阶段;否则进入施法停止阶段。

skill:stop()

事件

on_add

获得事件

每当单位从“没有该技能”变为“拥有该技能”时触发。注意,这里的“没有该技能”有2种情况:

  1. 单位身上没有这个技能
  2. 单位身上有这个技能,但等级为0
function mt:on_add()
-- 你的代码
end

on_remove

失去事件

每当单位失去此技能时触发。

function mt:on_remove()
-- 你的代码
end

on_upgrade

升级事件

每当此技能提升等级时触发

function mt:on_upgrade()
-- 你的代码
end

on_cooldown

冷却完成事件

每当技能冷却完成时触发此事件。对于充能技能来说,每次充能完成一层也会触发此事件。

function mt:on_cooldown()
-- 你的代码
end

on_enable

启用事件

每当使用enable,让技能从禁用状态变为启用状态时触发。

function mt:on_enable()
-- 你的代码
end

on_disable

禁用事件

每当使用disable,让技能从启用状态变为禁用状态时触发。

function mt:on_disable()
-- 你的代码
end

on_can_cast

即将施法事件

  • 事件返回
    • enbale (boolean) - 是否允许发动技能
    • error (string) - 错误消息

每当技能即将发动时触发,此时的技能是施法。在事件中返回false来阻止技能的发动。在阻止技能发动后,会在客户端上显示error文本。

function mt:on_can_cast()
return false, '不能发动此技能'
end

on_can_break

即将打断事件

  • 事件参数
    • dest (skill) - 想要发动的技能
  • 事件返回
    • break (boolean) - 是否打断施法

每当在此技能的施法过程中,想要发动另一个技能时触发。此时的技能和想要发动的另一个技能均为施法。在事件中返回true来打断当前施法。瞬发技能不会触发此事件(因为本来不会打断技能)。

function mt:on_can_break(dest)
return true
end

on_cast_start

施法开始事件

每当技能技能进入施法开始阶段时触发。此时的技能为施法。

function mt:on_cast_start()
-- 你的代码
end

on_cast_break

施法打断事件

每当技能进入施法打断阶段时触发。此时的技能为施法。

function mt:on_cast_break()
-- 你的代码
end

on_cast_channel

施法引导事件

每当技能进入施法引导阶段时触发。此时的技能为施法。

function mt:on_cast_channel()
-- 你的代码
end

on_cast_shot

施法出手事件

每当技能进入施法出手阶段时触发。此时的技能为施法。

function mt:on_cast_shot()
-- 你的代码
end

on_cast_finish

施法完成事件

每当技能进入施法完成阶段时触发。此时的技能为施法。

function mt:on_cast_finish()
-- 你的代码
end

on_cast_stop

施法停止事件

每当技能进入施法停止阶段时触发。此时的技能为施法。

function mt:on_cast_stop()
-- 你的代码
end

on_cast_failed

施法失败事件

每当技能在进入施法开始之前被验证为施法失败时触发。此时的技能为施法。 进入施法开始后, 框架认为该技能已经成功施法, 所以不会再调用该回调

--[[
error code defile:

0 CAST_SUCCESS, // 成功
1 CAST_CANT_INTERRUPT_PREVIOUS, //之前正释放的技能不能被打断
2 CAST_IN_COOLDOWN, // 技能冷却中
3 CAST_HP_NOT_ENOUGH, // 血不够(checked)
4 CAST_MP_NOT_ENOUGH, // 魔不够(checked)
5 CAST_UNUSED_0,
6 CAST_UNUSED_1,
7 CAST_OUT_DISTANCE, // 超出范围
8 CAST_NO_SPELL_OR_EQUIP, // 没技能或没装备
9 CAST_NOT_LEARNED_YET, //有技能但还没学(checked)
10 CAST_PARAM_INCORRECT, //说是朝单位放的却没有提供目标;或者说是往地上放的发现却是个非法地址(checked)
11 CAST_A_PASSIVE_SKILL, //放了一个被动技能(checked)
12 CAST_LUA_SAY_NO, //Lua返回说不让放
13 CAST_NO_COMMON_SKILL, //无普攻技能
14 CAST_TARGET_DEAD_OR_REMOVE, // 目标死亡或者被删除
15 CAST_SKILL_BE_LIMITED, // 当前状态不能释放技能,比如说被沉默了
16 CAST_UNUSED,
17 CAST_CLIENT_CANNOT_CAST_DISABLED_SKILL, // 客户端不能释放禁用技能
18 CAST_CLIENT_CANNOT_CAST_HIDE_SKILL, // 客户端不能释放隐藏技能(checked)
19 CAST_CASTER_IS_DEAD, // 施法者死亡了(checked)
20 CAST_LIMIT_TO_ALLY, // 技能不能对友方单位使用
21 CAST_LIMIT_TO_ENEMY, // 技能不能对敌方单位使用
22 CAST_LIMIT_TO_GOD, // 技能不能对无敌单位使用
23 CAST_LIMIT_TO_SKILL_IMMUNITY, // 技能不能对魔法免疫单位使用
24 CAST_LIMIT_TO_SELF, // 技能不能对自己使用
25 CAST_LIMIT_TO_UNLEGAL_TPYE, // 技能不能对当前类型施放
26 CAST_TARGET_IS_NONE, // 技能不能没有目标
]]--

function mt:on_cast_failed(failed_code)
-- 你的代码
end